#define _CRT_SECURE_NO_WARNINGS
//#include <stdio.h>
//#include <assert.h>
//
//void* my_memcpy(void* dest, const void* sre, int num)
//{
//	assert(dest && sre);
//	void* ret = dest;
//	int i = 0;
//	for (i = 0; i < num; i++)
//	{
//		*((char*)dest) = *((char*)sre);
//		((char*)dest)++;
//		((char*)sre)++;
//	}
//	return ret;
//}
//
//int main()
//{
//	int arr1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//	int arr2[5] = { 0 };
//	int i = 0;
//	my_memcpy(arr2, arr1, 12);
//	for (i = 0; i < 5; i++)
//	{
//		printf("%d ", arr2[i]);
//	}
//	char str1[] = "hello bit\0 haha";
//	char str2[20] = { 0 };
//	my_memcpy(str2, str1, 15);
//	for (i = 0; i < 20; i++)
//	{
//		printf("%c ", str2[i]);
//	}
//	printf("\n%s", str2);
//	return 0;
//}

#include <stdio.h>
#include <assert.h>

void* my_memcpy(void* dest, const void* sre, int num)
{
	assert(dest && sre);
	void* ret = dest;
	int i = 0;
	if (dest < sre)
	{
		for (i = 0; i < num; i++)
		{
			*((char*)dest) = *((char*)sre);
			((char*)dest)++;
			((char*)sre)++;
		}
		return ret;
	}
	else if (dest > sre)
	{
		for (i = 0; i < num; i++)
		{
			*((char*)dest + num - 1 - i) = *((char*)sre + num - 1 -i);
		}
		return ret;
	}
}

int main()
{
	int arr1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int arr2[5] = { 0 };
	int i = 0;
	my_memcpy(arr1 + 5, arr1, 20);
	for (i = 0; i < 11; i++)
	{
		printf("%d ", arr1[i]);
	}
	/*char str1[] = "hello bit\0 haha";
	char str2[20] = { 0 };
	my_memcpy(str2, str1, 15);
	for (i = 0; i < 20; i++)
	{
		printf("%c ", str2[i]);
	}
	printf("\n%s", str2);*/
	return 0;
}